From 22e1827f840044ac19c5a090af8511fe37ffcab7 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Wed, 8 Apr 2020 07:40:48 -0400 Subject: [PATCH] Change the default value of GtkWidget:can-focus Make widgets can-focus by default, and change the semantics of can-focus to be recursive . If it is set to FALSE, focus can not enter the widget or its descendents at all anymore. This commit temporarily breaks focus behavior of widgets that did not expect to receive focus. --- demos/gtk-demo/fontplane.c | 2 -- gtk/gtkbutton.c | 1 - gtk/gtkcolorplane.c | 2 -- gtk/gtkexpander.c | 2 -- gtk/gtkiconview.c | 1 - gtk/gtklistbox.c | 2 -- gtk/gtknotebook.c | 5 ----- gtk/gtktreeview.c | 1 - gtk/gtkwidget.c | 6 ++++-- 9 files changed, 4 insertions(+), 18 deletions(-) diff --git a/demos/gtk-demo/fontplane.c b/demos/gtk-demo/fontplane.c index 1f7e074adb..0a7aae6339 100644 --- a/demos/gtk-demo/fontplane.c +++ b/demos/gtk-demo/fontplane.c @@ -189,8 +189,6 @@ gtk_font_plane_init (GtkFontPlane *plane) { GtkGesture *gesture; - gtk_widget_set_can_focus (GTK_WIDGET (plane), TRUE); - gesture = gtk_gesture_drag_new (); g_signal_connect (gesture, "drag-begin", G_CALLBACK (plane_drag_gesture_begin), plane); diff --git a/gtk/gtkbutton.c b/gtk/gtkbutton.c index d633c77fe6..52165f8317 100644 --- a/gtk/gtkbutton.c +++ b/gtk/gtkbutton.c @@ -408,7 +408,6 @@ gtk_button_init (GtkButton *button) GtkButtonPrivate *priv = gtk_button_get_instance_private (button); GtkEventController *key_controller; - gtk_widget_set_can_focus (GTK_WIDGET (button), TRUE); gtk_widget_set_receives_default (GTK_WIDGET (button), TRUE); priv->in_button = FALSE; diff --git a/gtk/gtkcolorplane.c b/gtk/gtkcolorplane.c index 2c4ae692f2..5b88ea3ba9 100644 --- a/gtk/gtkcolorplane.c +++ b/gtk/gtkcolorplane.c @@ -407,8 +407,6 @@ gtk_color_plane_init (GtkColorPlane *plane) plane->priv = gtk_color_plane_get_instance_private (plane); - gtk_widget_set_can_focus (GTK_WIDGET (plane), TRUE); - atk_obj = gtk_widget_get_accessible (GTK_WIDGET (plane)); if (GTK_IS_ACCESSIBLE (atk_obj)) { diff --git a/gtk/gtkexpander.c b/gtk/gtkexpander.c index dbe31e68e0..91f73aa654 100644 --- a/gtk/gtkexpander.c +++ b/gtk/gtkexpander.c @@ -385,8 +385,6 @@ gtk_expander_init (GtkExpander *expander) GtkGesture *gesture; GtkEventController *controller; - gtk_widget_set_can_focus (GTK_WIDGET (expander), TRUE); - priv->label_widget = NULL; priv->child = NULL; diff --git a/gtk/gtkiconview.c b/gtk/gtkiconview.c index 275b598675..508a016c19 100644 --- a/gtk/gtkiconview.c +++ b/gtk/gtkiconview.c @@ -943,7 +943,6 @@ gtk_icon_view_init (GtkIconView *icon_view) icon_view->priv->mouse_x = -1; icon_view->priv->mouse_y = -1; - gtk_widget_set_can_focus (GTK_WIDGET (icon_view), TRUE); gtk_widget_set_overflow (GTK_WIDGET (icon_view), GTK_OVERFLOW_HIDDEN); icon_view->priv->item_orientation = GTK_ORIENTATION_VERTICAL; diff --git a/gtk/gtklistbox.c b/gtk/gtklistbox.c index bae24231cd..f2cf390cde 100644 --- a/gtk/gtklistbox.c +++ b/gtk/gtklistbox.c @@ -3430,8 +3430,6 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass) static void gtk_list_box_row_init (GtkListBoxRow *row) { - gtk_widget_set_can_focus (GTK_WIDGET (row), TRUE); - ROW_PRIV (row)->activatable = TRUE; ROW_PRIV (row)->selectable = TRUE; diff --git a/gtk/gtknotebook.c b/gtk/gtknotebook.c index 9b78beffa8..96b1f598e9 100644 --- a/gtk/gtknotebook.c +++ b/gtk/gtknotebook.c @@ -1387,8 +1387,6 @@ gtk_notebook_init (GtkNotebook *notebook) GtkLayoutManager *layout; GtkDropTarget *dest; - gtk_widget_set_can_focus (GTK_WIDGET (notebook), TRUE); - notebook->cur_page = NULL; notebook->children = NULL; notebook->first_tab = NULL; @@ -6087,8 +6085,6 @@ gtk_notebook_set_show_tabs (GtkNotebook *notebook, if (!show_tabs) { - gtk_widget_set_can_focus (GTK_WIDGET (notebook), FALSE); - while (children) { page = children->data; @@ -6106,7 +6102,6 @@ gtk_notebook_set_show_tabs (GtkNotebook *notebook, } else { - gtk_widget_set_can_focus (GTK_WIDGET (notebook), TRUE); gtk_notebook_update_labels (notebook); gtk_widget_show (notebook->header_widget); } diff --git a/gtk/gtktreeview.c b/gtk/gtktreeview.c index 3580ab8f8d..6d68907a5a 100644 --- a/gtk/gtktreeview.c +++ b/gtk/gtktreeview.c @@ -1707,7 +1707,6 @@ gtk_tree_view_init (GtkTreeView *tree_view) GtkEventController **controllers; guint n_controllers, i; - gtk_widget_set_can_focus (GTK_WIDGET (tree_view), TRUE); gtk_widget_set_overflow (GTK_WIDGET (tree_view), GTK_OVERFLOW_HIDDEN); tree_view->show_expanders = TRUE; diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 38233c1359..706fc5f0be 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -978,7 +978,7 @@ gtk_widget_class_init (GtkWidgetClass *klass) g_param_spec_boolean ("can-focus", P_("Can focus"), P_("Whether the widget can accept the input focus"), - FALSE, + TRUE, GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY); widget_props[PROP_HAS_FOCUS] = @@ -2294,6 +2294,7 @@ gtk_widget_init (GTypeInstance *instance, gpointer g_class) #ifdef G_ENABLE_DEBUG priv->highlight_resize = FALSE; #endif + priv->can_focus = TRUE; priv->can_target = TRUE; switch (_gtk_widget_get_direction (widget)) @@ -6681,7 +6682,8 @@ gtk_widget_child_focus (GtkWidget *widget, g_return_val_if_fail (GTK_IS_WIDGET (widget), FALSE); if (!_gtk_widget_get_visible (widget) || - !gtk_widget_is_sensitive (widget)) + !gtk_widget_is_sensitive (widget) || + !gtk_widget_get_can_focus (widget)) return FALSE; /* Emit ::focus in any case, even if can-focus is FALSE, -- 2.30.2